package com.doordu.soa.service.comm.utils;

import java.util.StringTokenizer;
/**
 * 分隔字符串成数组，分隔符为,
 * @ClassName: AnalyticalStr
 * @Description: 
 * @author xiaoqun.yi yixq@doordu.com
 * @date 2017年4月14日 上午9:35:05
 * @version V1.0
 */
public class AnalyticalStr {
	/**
	 * 使用StringTokenizer类将字符串按分隔符转换成字符数组
	 * 
	 * @param string
	 *            字符串
	 * @param divisionChar
	 *            分隔符
	 * @return 字符串数组
	 * @see [类、类#方法、类#成员]
	 */
	public static String[] stringAnalytical(String string, String divisionChar) {
		int i = 0;
		StringTokenizer tokenizer = new StringTokenizer(string, divisionChar);

		String[] str = new String[tokenizer.countTokens()];

		while (tokenizer.hasMoreTokens()) {
			str[i] = new String();
			str[i] = tokenizer.nextToken();
			i++;
		}

		return str;
	}

	/**
	 * 字符串解析，不使用StringTokenizer类和java.lang.String的split()方法 将字符串根据分割符转换成字符串数组
	 * 
	 * @param string
	 *            字符串
	 * @param c
	 *            分隔符
	 * @return 解析后的字符串数组
	 */
	public static String[] stringAnalytical(String string, char c) {
		// 字符串中分隔符的个数
		int count = 0;

		// 如果不含分割符则返回字符本身
		if (string.indexOf(c) == -1) {
			return new String[] { string };
		}

		char[] cs = string.toCharArray();

		// 过滤掉第一个和最后一个是分隔符的情况
		for (int i = 1; i < cs.length - 1; i++) {
			if (cs[i] == c) {
				count++; // 得到分隔符的个数
			}
		}

		String[] strArray = new String[count + 1];
		int k = 0, j = 0;
		String str = string;

		// 去掉第一个字符是分隔符的情况
		if ((k = str.indexOf(c)) == 0) {
			str = string.substring(k + 1);
		}

		// 检测是否包含分割符，如果不含则返回字符串
		if (str.indexOf(c) == -1) {
			return new String[] { str };
		}

		while ((k = str.indexOf(c)) != -1) {
			strArray[j++] = str.substring(0, k);
			str = str.substring(k + 1);
			if ((k = str.indexOf(c)) == -1 && str.length() > 0) {
				strArray[j++] = str.substring(0);
			}
		}

		return strArray;
	}

	public static void main(String[] args) {
		String str = "数据1，数据2，数据3，数据4，数据5，数据6";

		for (String tmp : AnalyticalStr.stringAnalytical(str, '，')) {
			System.out.println(tmp);
		}
	}
}